﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Shapes;

using Controller;
using Interface;

// Dette vindue er lavet af Gruppe 4 DM12a
namespace BookingSystem
{
    /// <summary>
    /// Interaction logic for FindKunde.xaml
    /// </summary>
    public partial class FindKunde : Window
    {
        BookingController minBookingController;
        MainWindow myMain;

        public FindKunde(BookingController minBookingController) // Sender BookingController med over i FindKunde vinduet.
        {
            InitializeComponent();
            this.minBookingController = minBookingController; // nu kender vinduet bookingcontrolleren

            myMain = new MainWindow();

            btnGem.IsEnabled = false;
        }

        private void Window_Loaded(object sender, RoutedEventArgs e)
        {
            cbSøgKunde.ItemsSource = minBookingController.KundeList(); // comboboksen cbSøgKunde bliver fyldt med kunderne der ligger i minBookingController.
        }

        private void cbSøgKunde_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            if (cbSøgKunde.SelectedItem is IKunde) // betingelsen er at selecteditem i cbSøgKunde skal være et Ikunde objekt
            {
                IKunde iKunde = (IKunde)cbSøgKunde.SelectedItem; // iKunde bliver sat lig med selecteditem i cbSøgKunde

                int kundeId = iKunde.KundeId;

                txtNavn.Text = iKunde.Navn; // den sætter tekstfeltet txtNavn lig med iKunde's navn.
                txtAdresse.Text = iKunde.Adresse;
                txtKundeId.Text = iKunde.KundeId.ToString();
                txtEmail.Text = iKunde.Email;
                txtPostNr.Text = iKunde.PostNr;
                txtBy.Text = iKunde.Distrikt;
                txtTlf.Text = iKunde.TlfNr.ToString();
                txtLand.Text = iKunde.land;

                btnGem.IsEnabled = false; // knappen btnGem bliver ugyldig
            }
        }

        private void btnOpret_Click(object sender, RoutedEventArgs e)
        {
            txtAdresse.Clear(); // tømmer feltet txtAdresse
            txtBy.Clear();
            txtEmail.Clear();
            txtKundeId.Clear();
            txtLand.Clear();
            txtNavn.Clear();
            txtPostNr.Clear();
            txtTlf.Clear();

            btnGem.IsEnabled = true; // knappen btnGem bliver tilgengæld
        }

        private void btnGem_Click(object sender, RoutedEventArgs e)
        {
            string navn, adresse, postNr, email, land, distrikt;
            int tlf, kundeId = 0;
            try
            {
                navn = txtNavn.Text; // variablen navn sættes lig med strengen i tekstboksens txtNavn
                adresse = txtAdresse.Text;
                postNr = txtPostNr.Text;
                distrikt = txtBy.Text;
                tlf = int.Parse(txtTlf.Text);
                email = txtEmail.Text;
                land = txtLand.Text;

                if (tlf > 0 && land.Count() > 0 && navn.Count() > 0 && adresse.Count() > 0 && email.Count() > 0)
                {
                    kundeId = minBookingController.GemKunde(navn, adresse, postNr, tlf, email, land); // bruger metoden GemKunde i bookingController med følgende paramtetre navn, adresse, postNr, tlf, email og land.
                    minBookingController.OpretKunde(navn, adresse, postNr, distrikt, tlf, email, kundeId, land);

                    MessageBox.Show("Du har nu oprettet en ny kunde.");
                    btnGem.IsEnabled = false;

                    cbSøgKunde.ItemsSource = null;
                    cbSøgKunde.ItemsSource = minBookingController.KundeList();
                }
                else
                {
                    MessageBox.Show("Husk at udfylde felterne rigtigt.");
                }
            }
            catch
            {
                MessageBox.Show("Felterne er ikke udfyldte korrekte. Prøv igen.");
            }
        }

        private void btnSlet_Click(object sender, RoutedEventArgs e)
        {
            try
            {
                if (MessageBox.Show("Er du sikker på du vil slette kunden", "OBS!", MessageBoxButton.YesNo) == MessageBoxResult.Yes)
                {
                    IKunde kunde = (IKunde)cbSøgKunde.SelectedItem;
                    minBookingController.SletKunde(kunde.KundeId);
                    txtNavn.Clear();
                    txtAdresse.Clear();
                    txtBy.Clear();
                    txtPostNr.Clear();
                    txtLand.Clear();
                    txtTlf.Clear();
                    txtEmail.Clear();
                    txtKundeId.Clear();

                    MessageBox.Show("Du har nu slettet kunden med følgende id: " + kunde.KundeId);

                    cbSøgKunde.ItemsSource = null;
                    cbSøgKunde.ItemsSource = minBookingController.KundeList();
                }
            }
            catch
            {
                MessageBox.Show("Du kan ikke slette kunden, da kunden har en booking");
            }
        }

        private void txtPostNr_TextChanged(object sender, TextChangedEventArgs e)
        {
            string tempStr = String.Empty;

            // For hvert c i textboxen
            foreach (char c in txtPostNr.Text)
            {
                // if-sætningen viser om det man skriver i textboxen er decimale tal
                if (char.IsDigit(c) == true)
                    tempStr += c; // hvis den er true plusser den det oveni i stringen
            }

            txtPostNr.Text = tempStr;

            if (txtPostNr.Text.Length == 4) // hvis textboxen er lig med 4 tal skal den udføre metoden
            {
                txtBy.Text = minBookingController.HentByer(txtPostNr.Text);
            }
        }

        private void btnRedigere_Click(object sender, RoutedEventArgs e)
        {
            try
            {
                IKunde kunde = (IKunde)cbSøgKunde.SelectedItem;
                string navn = txtNavn.Text;
                string adresse = txtAdresse.Text;
                int tlf = int.Parse(txtTlf.Text);
                string email = txtEmail.Text;
                string land = txtLand.Text;
                int kundeId = int.Parse(txtKundeId.Text);

                if (tlf > 0 && land.Count() > 0 && navn.Count() > 0 && adresse.Count() > 0 && email.Count() > 0)
                {
                    minBookingController.Redigere(kundeId, navn, adresse, tlf, email, land);

                    cbSøgKunde.ItemsSource = null;
                    cbSøgKunde.ItemsSource = minBookingController.KundeList();
                }
                else
                {
                    MessageBox.Show("Kunden kunne ikke redigeres.");
                }
            }
            catch 
            {
                MessageBox.Show("Udfyld alle bokse!");
            }
        }

        private void btnNext_Click(object sender, RoutedEventArgs e)
        {
            try
            {
                if (cbSøgKunde.SelectedItem != null) // hvis der ikke er valgt noget i cbSøgKunde, går den i else sætningen
                {
                    int kundeId = int.Parse(txtKundeId.Text);

                    string kunde = minBookingController.VælgKunde(kundeId); // her bruger den metoden VælgKunde 
                    MessageBox.Show(kunde);
                    myMain.Activate();
                    this.Close();
                }
                else
                {
                    MessageBox.Show("Du har ikke valgt en kunde.");
                }
            }
            catch
            {
                MessageBox.Show("Du har ikke valgt en kunde, prøv igen.");
            }
        }
    }
}
